home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 2 / Atari Mega Archive CD - Volume 2.iso / minix / up1510b.tgz / up1510b / src / commands / mount.c < prev    next >
C/C++ Source or Header  |  1990-07-15  |  1KB  |  68 lines

  1. /* mount - mount a file system        Author: Andy Tanenbaum */
  2.  
  3. #include <errno.h>
  4. #include <sys/types.h>
  5. #include <fcntl.h>
  6. #include <unistd.h>
  7.  
  8. #define BUFSIZE 1024
  9.  
  10. extern int errno;
  11. char *mounttable = "/etc/mtab";
  12. char buffer[BUFSIZE];
  13.  
  14. main(argc, argv)
  15. int argc;
  16. char *argv[];
  17. {
  18.   int ro, fd;
  19.  
  20.   if (argc == 1) list();
  21.   if (argc < 3 || argc > 4) usage();
  22.   if (argc == 4 && *argv[3] != '-' && *(argv[3] + 1) != 'r') usage();
  23.   ro = (argc == 4 ? 1 : 0);
  24.   if (mount(argv[1], argv[2], ro) < 0) {
  25.     if (errno == EINVAL) {
  26.         std_err("mount: ");
  27.         std_err(argv[1]);
  28.         std_err(" is not a valid file system.\n");
  29.     } else {
  30.         perror("mount");
  31.     }
  32.     exit(1);
  33.   }
  34.   std_err(argv[1]);
  35.   std_err(" mounted\n");
  36.   if ((fd = open(mounttable, O_RDWR)) < 0) exit(1);
  37.   lseek(fd, 0L, SEEK_END);    /* seek to EOF */
  38.   write(fd, argv[1], strlen(argv[1]));
  39.   write(fd, " is mounted on ", 15);
  40.   write(fd, argv[2], strlen(argv[2]));
  41.   write(fd, "\n", 1);
  42.   exit(0);
  43. }
  44.  
  45.  
  46. list()
  47. {
  48.   int fd, n;
  49.  
  50.   fd = open(mounttable, O_RDONLY);
  51.   if (fd < 0) {
  52.     std_err("mount: cannot open ");
  53.     std_err(mounttable);
  54.     std_err("\n");
  55.     exit(1);
  56.   }
  57.   n = read(fd, buffer, BUFSIZE);
  58.   write(1, buffer, n);
  59.   exit(0);
  60. }
  61.  
  62.  
  63. usage()
  64. {
  65.   std_err("Usage: mount special name [-r]\n");
  66.   exit(1);
  67. }
  68.